# -*- coding: utf8 -*-

def completar_a_ocho_bits(binario):
    bits_del_binario = len(binario) - 2
    bits_que_faltan = 8 - bits_del_binario
    binario_en_ocho = str(binario).split("b")[1]
    while bits_que_faltan > 0:
        binario_en_ocho = '0' + binario_en_ocho
        bits_que_faltan = bits_que_faltan - 1
    return binario_en_ocho

def ip_en_binario(ip):
    values = ip.split(".")
    byte1 = completar_a_ocho_bits(str(bin(int(values[0]))))
    byte2 = completar_a_ocho_bits(str(bin(int(values[1]))))
    byte3 = completar_a_ocho_bits(str(bin(int(values[2]))))
    byte4 = completar_a_ocho_bits(str(bin(int(values[3]))))
    return [list(byte1), list(byte2), list(byte3), list(byte4)]

def dir_ip_de_red(ip, mascara):
    ip_binaria = ip_en_binario(ip)
    i = 0
    j = 0
    while i < 32:
        if j > 7:
            j = 0
        if i >= mascara:
            ip_binaria[i/8][j] = '0'
        i = i + 1
        j = j + 1
    ip_con_mascara = []
    ip_con_mascara.append(str(int(''.join(ip_binaria[0]), 2)))
    ip_con_mascara.append(str(int(''.join(ip_binaria[1]), 2)))
    ip_con_mascara.append(str(int(''.join(ip_binaria[2]), 2)))
    ip_con_mascara.append(str(int(''.join(ip_binaria[3]), 2)))
    return '.'.join(ip_con_mascara)

def siguiente_ip(ip):
    values = ip.split(".")
    primer_byte = int(values[0])
    segundo_byte = int(values[1])
    tercer_byte = int(values[2])
    cuarto_byte = int(values[3])

    primer_byte_sig = primer_byte
    segundo_byte_sig = segundo_byte
    tercer_byte_sig = tercer_byte
    cuarto_byte_sig = cuarto_byte + 1

    if cuarto_byte == 255:
        cuarto_byte_sig = 0
        if tercer_byte == 255:
            tercer_byte_sig = 0 
            if segundo_byte == 255:
                segundo_byte_sig = 0
                if primer_byte == 255:
                    return None
                else:
                    primer_byte_sig = primer_byte + 1
            else:
                segundo_byte_sig = segundo_byte + 1
        else:
            tercer_byte_sig = tercer_byte + 1

    sig_ip = str(primer_byte_sig) + '.'
    sig_ip = sig_ip + str(segundo_byte_sig) + '.'
    sig_ip = sig_ip + str(tercer_byte_sig) + '.'
    sig_ip = sig_ip + str(cuarto_byte_sig)
    return sig_ip

